//
//  BATabBar.swift
//  BAweibo
//
//  Created by baggio on 2017/8/1.
//  Copyright © 2017年 baggio. All rights reserved.
//

import UIKit


// “+”号按钮，自定义一个 TabBar
class BATabBar: UITabBar {
    //第1步，定义闭包
    var closure:(()->())?
    
    //自定义控件，一般要重写 override init(frame: CGRect)，然后再 self.addSubview，需要设定 frame 的大小和约束
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUpUI()
    }
    
    //自定义控件，必须要有，这是断言，如果当前类在 xib 或 storyboard 中使用，会调用该方法，会告知使用者当前的类不支持xib 和 storyboard
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setUpUI(){
        //添加子控件
        addSubview(composeBtn)
        
    }
    
    //添加子控件，就会执行该方法
    //所以在该方法中设置“+”号按钮的位置，否则出现在tabBar的最左边
    override func layoutSubviews() {
        
        //这句话不能少，否则 加了“+”号按钮后，原来的tabBar上的几个子视图 就会都挤到 最左边
        super.layoutSubviews()
        
        //这里的 frame 就是 下面的 tabBar
        composeBtn.center.x=frame.width*0.5
        composeBtn.center.y=frame.height*0.5
        //不能用 self.center，因为这里的 self 是 BAMainViewContoller，是整个屏幕
//        composeBtn.center=self.center
        
        //设置 4个 UITabBarButton 的位置
        //所有子控件的数组 subviews
        //每个 UITabBarButton 的宽度是1/5的 UITabBar
        let width = frame.width*0.2
        var index:CGFloat=0// 因为下面的 v.frame.origin.x 是 CGFloat
        for v in subviews {
            //print(v)
            //判断 UITabBarButton，不能用 UITabBarButton.self (只有公共类才可以，UITabBarButton是系统私有类)
            if(v.isKind(of: NSClassFromString("UITabBarButton")!)){
                v.frame.size.width=width
                //设置 UITabBarButton 的x轴
                v.frame.origin.x=index*width
                
                index+=1
                
                //去掉“+”号按钮
                if(index==2){
                    index+=1
                }
            }
        }
    }
    
    //该自定义控件中的 其他子控件 都以这种懒加载的方式创建
    //改用扩展后的 UIButton 的便利构造函数
//    lazy var composeBtn:UIButton={
//        let btn=UIButton()
//        
//        //4张图片  
//        btn.setImage(UIImage(named:"tabbar_compose_icon_add"), for: .normal)// UIImage(named:"") 没有自动提示
//        btn.setImage(UIImage(named:"tabbar_compose_icon_add_highlighted"), for: .highlighted)
//        btn.setBackgroundImage(UIImage(named:"tabbar_compose_button"), for: .normal)
//        btn.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), for: .highlighted)
//        
//        //
//        btn.addTarget(self, action: #selector(composeBtnClick), for: UIControlEvents.touchUpInside)
//        
//        //通过背景图片得到按钮大小，如果没有这句话就看不见“+”号按钮
//        btn.sizeToFit()
//        
//        return btn
//    }()
    
    lazy var composeBtn:UIButton=UIButton(title: nil, titleColor: nil, titleColorHighlight: nil, titleLabelFont: nil, imgName: "tabbar_compose_icon_add", backgroundImgName: "tabbar_compose_button", target: self, action: #selector(composeBtnClick))
    
    
    //如果要 写 private，就必须前面加上 @objc private
    func composeBtnClick(){
        
        //一个类中点击了button，让另一个类响应。解决方式：用闭包作为第一个类中的一个属性，由第二个类来访问（也可以用：单例、代理、通知）
        //四步走，第一个类中定义（第1步）和执行（第3步），第二个类实例化（第2步），回调（第4步），13不分家，24不分家，第一个类决定什么时候调用闭包，第二个类决定闭包做什么事情
        //难点在于24写在第二个类的哪里，可以写在第二个类中实例化第一个类对象的地方
        //第3步，执行闭包
        closure!()
    }

}
